package com.quanz.ckgl.services;

import java.io.IOException;
import java.io.InputStream;

import org.crank.crud.criteria.Criterion;
import org.crank.crud.criteria.OrderBy;

/**
 * 产品信息维护服务
 * 
 * @author James Quan
 * @version 2015年10月4日 下午2:38:18
 */
public interface ProductService {

	/**
	 * 建立产品信息
	 * 
	 * @param product
	 *            待新建的产品
	 * @return
	 */
	public Product createProduct(Product product);

	/**
	 * 保存对产品信息的修改
	 * 
	 * @param product
	 *            待保存的产品
	 */
	public void updateProduct(Product product);

	/**
	 * 删除产品
	 * 
	 * @param product
	 *            待删除的产品
	 */
	public void removeProduct(Product product);

	/**
	 * 根据产品id查找产品
	 * 
	 * @param id
	 *            产品的id
	 * @return
	 */
	public Product findProductById(String id);

	/**
	 * 根据产品条码查找产品
	 * 
	 * @param barcode
	 *            产品的条码
	 * @return
	 */
	public Product findProductByBarcode(String barcode);

	/**
	 * 返回满足约束条件的产品对象集合
	 * 
	 * @param orderBy
	 *            返回结果时的排序设置
	 * @param startPosition
	 *            返回结果前 跳过的记录条数，如果设置为-1则不控制
	 * @param maxResults
	 *            返回结果的最大记录条数，如果设置为-1则不控制
	 * @param criteria
	 *            查询约束条件
	 * @return
	 */
	public Product[] findProduct(OrderBy[] orderBy, int startPosition,
			int maxResults, Criterion... criteria);

	/**
	 * 返回满足约束条件的产品对象个数
	 * 
	 * @param criteria
	 *            查询约束条件
	 * @return
	 */
	public int findProductCount(Criterion... criteria);

	/**
	 * 返回产品的图片信息集合
	 * 
	 * @param id
	 *            产品的id
	 * @return
	 */
	public ImageInfo[] findProductImages(String id);

	/**
	 * 返回图片的信息
	 * 
	 * @param productId
	 * @param name
	 * @return
	 */
	public ImageInfo findProductImageByName(String productId, String name);

	/**
	 * 返回图片的数据
	 * 
	 * @param id
	 *            图片的id
	 * @return
	 * @throws IOException
	 */
	public InputStream getProductImage(long id) throws IOException;

	/**
	 * 加入产品图片
	 * 
	 * @param info
	 *            产品图片信息
	 * @param data
	 *            产品图片数据
	 * @return
	 */
	public ImageInfo createImage(ImageInfo info, InputStream data);

	/**
	 * 删除产品图片
	 * 
	 * @param info
	 */
	public void removeImage(ImageInfo info);

}
